﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO_MechSys;
using System.Data.SqlClient;
using System.Data;


namespace DAL_MechSys
{
    public class DALServico:  DALBase
    {
        public void Excluir(int servicoID)
        {
            try
            {
                string storedProssidere = "sp_ExcluirServico";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@servicoID", servicoID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Inserir(DTOServico dtoServico)
        {
            try
            {
                string storedProssidere = "sp_InserirServico";
                SqlParameter[] parameters =
                
                { 
                   new SqlParameter("@descricao", dtoServico.Descricao),
                   new SqlParameter("@valorSugerido", dtoServico.ValorSugerido),
                   new SqlParameter("@descontinuando", dtoServico.Descontinuando)

                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }
        
        public void Atualizar(DTOServico dtoServico)
        {
            try
            {
                string storedProssidere = "sp_AtualizarServico";
                SqlParameter[] parameters =

                {                  
                   new SqlParameter("@servicoID", dtoServico.ServicoID),
                   new SqlParameter("@descricao", dtoServico.Descricao),
                   new SqlParameter("@valorSugerido", dtoServico.ValorSugerido),
                   new SqlParameter("@descontinuando", dtoServico.Descontinuando)         
                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public List<DTOServico> BuscarServicosCadastrados()
        {
            List<DTOServico> lstServico  = new List<DTOServico>();

            try
            {
                string storedProssidere = "sp_BuscarServicosCadastrados";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOServico dtoServico = CriarServico(sqlDataReader);

                        lstServico.Add(dtoServico);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstServico;
        }

        public bool VerificaSeServicoIDExiste(int servicoID)
        {
            bool Existe = false;

            try
            {
                string storedProssidere = "sp_VerificaSeServicoIDExiste";

                SqlParameter[] parameters =
            {
                new SqlParameter("@servicoID", servicoID),                            
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        int NumReg = (int)sqlDataReader["NumeroRegistros"];
                        if (NumReg > 0)
                        {
                            Existe = true;
                        }

                    }
                }
                return Existe;

            }
            catch (Exception)
            {
                throw;
            }

        }

        public List<DTOServico> BuscarServicosCadastradosLinha()
        {
            List<DTOServico> lstServico = new List<DTOServico>();

            try
            {
                string storedProssidere = "sp_BuscarServicosCadastradosLinha";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOServico dtoServico = CriarServico(sqlDataReader);

                        lstServico.Add(dtoServico);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstServico;
        }

        public DataTable BuscaServicosOrdem(int OrdemPendenteID)
        {
            DataTable lstServico = new DataTable();
            lstServico.Columns.Add("OrdemDetalheServicoID");
            lstServico.Columns.Add("ID");
            lstServico.Columns.Add("Descrição");
            lstServico.Columns.Add("Funcionario");
            lstServico.Columns.Add("Valor");
            lstServico.Columns.Add("Status", typeof(bool));
            DataRow dr;
            try
            {
                string storedProssidere = "sp_BuscarServicoOrdemPendente";
                SqlParameter[] parameters =

                {      
                   new SqlParameter("@ordemPendenteid", OrdemPendenteID)         
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        dr = lstServico.NewRow();
                        dr["OrdemDetalheServicoID"] = (int)sqlDataReader["OrdemDetalheServicoID"];
                        dr["ID"] = (int)sqlDataReader["ServicoID"];
                        dr["Descrição"] = (string)sqlDataReader["Descricao"];
                        dr["Funcionario"] = (sqlDataReader["Funcionario"].ToString());
                        dr["Valor"] = string.Format("{0:0.00}", (double.Parse(sqlDataReader["Valor"].ToString())));
                        dr["Status"] = bool.Parse(sqlDataReader["Status"].ToString());
                        lstServico.Rows.Add(dr);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            if (lstServico.Rows.Count > 0)
                return lstServico;
            else
                return new DataTable();
        }



        public DataTable BuscarServicosPendentes()
        {
            DataTable lstServico = new DataTable();
            lstServico.Columns.Add("Entrada");
            lstServico.Columns.Add("Ordem ID");
            lstServico.Columns.Add("OrdemDetalheServicoID");
            lstServico.Columns.Add("Descrição");
            lstServico.Columns.Add("Veículo");
            lstServico.Columns.Add("Placa");
            lstServico.Columns.Add("Valor");
            lstServico.Columns.Add("Funcionario");
            lstServico.Columns.Add("Previsão");
            lstServico.Columns.Add("Status", typeof(bool));
            DataRow dr;

            try
            {
                string storedProssidere = "sp_BuscarServicosPendentes";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {
                        dr = lstServico.NewRow();
                        dr["Entrada"] = DateTime.Parse(sqlDataReader["DataEntrada"].ToString()).ToShortDateString();
                        dr["Previsão"] = DateTime.Parse(sqlDataReader["PrevisaoEntrega"].ToString()).ToShortDateString();
                        dr["Ordem ID"] = (int)sqlDataReader["OrdemPendenteID"];
                        dr["OrdemDetalheServicoID"] = (int)sqlDataReader["OrdemDetalheServicoID"];
                        dr["Descrição"] = (string)sqlDataReader["Descricao"];
                        dr["Veículo"] = (string)sqlDataReader["Veiculo"];
                        dr["Placa"] = (string)sqlDataReader["Placa"];
                        dr["Funcionario"] = (sqlDataReader["Funcionario"].ToString());
                        dr["Valor"] = string.Format("{0:0.00}", (double.Parse(sqlDataReader["Valor"].ToString())));
                        dr["Status"] = bool.Parse(sqlDataReader["Status"].ToString());
                        lstServico.Rows.Add(dr);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            if (lstServico.Rows.Count > 0)
                return lstServico;
            else
                return new DataTable();
        }

        public List<DTOServico> BuscarServicosCadastradosForaLinha()
        {
            List<DTOServico> lstProduto = new List<DTOServico>();

            try
            {
                string storedProssidere = "sp_BuscarServicosCadastradosForaLinha";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOServico dtoProduto = CriarServico(sqlDataReader);

                        lstProduto.Add(dtoProduto);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstProduto;
        }

        private DTOServico CriarServico(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOServico dtoServico = new DTOServico();

                if (!string.IsNullOrEmpty(sqlDataReader["ServicoID"].ToString()))
                {
                    dtoServico.ServicoID = (int)sqlDataReader["ServicoID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Descricao"].ToString()))
                {
                    dtoServico.Descricao = (string)sqlDataReader["Descricao"];
                }               

                if (!string.IsNullOrEmpty(sqlDataReader["ValorSugerido"].ToString()))
                {
                    dtoServico.ValorSugerido = float.Parse(sqlDataReader["ValorSugerido"].ToString());
                }
                
                if (!string.IsNullOrEmpty(sqlDataReader["Descontinuando"].ToString()))
                {
                    dtoServico.Descontinuando = bool.Parse(sqlDataReader["Descontinuando"].ToString());
                }

                return dtoServico;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public List<DTOServico> PesquisarServico(string descricao, int codigo)
        {
            List<DTOServico> lstProduto = new List<DTOServico>();

            try
            {
                string storedProssidere = "sp_BuscarServicosPesquisa";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", descricao),
                   new SqlParameter("@int", codigo)

                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOServico dtoProduto = CriarServico(sqlDataReader);

                        lstProduto.Add(dtoProduto);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstProduto;
        }

        public List<DTOServico> PesquisarServicoLinha(string descricao, int codigo)
        {
            List<DTOServico> lstProduto = new List<DTOServico>();

            try
            {
                string storedProssidere = "sp_BuscarServicosPesquisaLinha";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", descricao),
                   new SqlParameter("@int", codigo)

                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOServico dtoProduto = CriarServico(sqlDataReader);

                        lstProduto.Add(dtoProduto);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstProduto;
        }

    }
}
